package com.xingyi.bacs.task;

import com.xingyi.bacs.service.FrService;
import com.xingyi.bacs.service.QsService;
import com.xingyi.bacs.util.DatetimeUtil;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

/**
 * Created by wujt on 23/9/2021
 */
//Cron表达式范例：
//每隔5秒执行一次：*/5 * * * * ?
//每隔1分钟执行一次：0 */1 * * * ?
//每天23点执行一次：0 0 23 * * ?
//每天凌晨1点执行一次：0 0 1 * * ?
//每月1号凌晨1点执行一次：0 0 1 1 * ?
//每月最后一天23点执行一次：0 0 23 L * ?
//每周星期天凌晨1点实行一次：0 0 1 ? * L
//在26分、29分、33分执行一次：0 26,29,33 * * * ?
//每天的0点、13点、18点、21点都执行一次：0 0 0,13,18,21 * * ?
@Configuration      //1.主要用于标记配置类，兼备Component的效果。
@EnableScheduling   // 2.开启定时任务
@Component
public class SaticScheduleTask {

    @Resource
    private QsService qsService;
    @Resource
    private FrService frService;

    final String date = DatetimeUtil.getYesterday(DatetimeUtil.DATE_FORMAT);

    /**
     * 商户表跑批定时任务
     */
    @Scheduled(cron = "0 0 0 * * ?")
    public synchronized void MerchantTask() {
        qsService.runMerchant(date);
    }

    /**
     * 结算表跑批定时任务
     */
    @Scheduled(cron = "0 05 0 * * ?")
    public synchronized void SettlementTask() {
        qsService.runSettlement(date);
    }

    /**
     * 挂账表跑批定时任务
     */
    @Scheduled(cron = "0 10 0 * * ?")
    public synchronized void BillTask() {
        qsService.runBill();
    }

    /**
     * 账户结算信息表跑批定时任务
     */
    @Scheduled(cron = "0 15 0 * * ?")
    public synchronized void RJFRAccountInfoTask() {
        frService.runRJFRAccountInfo(date);
    }

    /**
     * 代理人账户结算信息表跑批定时任务
     */
    @Scheduled(cron = "0 20 0 * * ?")
    public synchronized void DLRAccountInfoTask() {
        frService.runDLRAccountInfo(date);
    }

    /**
     * 结算信息汇总表跑批定时任务
     */
    @Scheduled(cron = "0 25 0 * * ?")
    public synchronized void RJAccountSumTask() {
        frService.runRJAccountSum(date);
    }

    /**
     * 代理人账户汇总表跑批定时任务
     */
    @Scheduled(cron = "0 30 0 * * ?")
    public synchronized void DLRAccountSumTask() {
        frService.runDLRAccountSum(date);
    }

    /**
     * 提现流水表跑批定时任务
     */
    @Scheduled(cron = "0 35 0 * * ?")
    public synchronized void RjfrTxWaterTask() {
        frService.runRjfrTxWater(date);
    }

    /**
     * 账户流水表跑批定时任务
     */
    @Scheduled(cron = "0 40 0 * * ?")
    public synchronized void RJAccountFlowTask() {
        frService.runRJAccountFlow(date);
    }

    /**
     * 充值分润流水表跑批定时任务
     */
    @Scheduled(cron = "0 45 0 * * ?")
    public synchronized void RJCzFrWaterTask() {
        frService.runRJCzFrWater(date);
    }

    /**
     * 充值返现流水表跑批定时任务
     */
    @Scheduled(cron = "0 50 0 * * ?")
    public synchronized void RJCzFxWaterTask() {
        frService.runRJCzFxWater(date);
    }

    /**
     * 费用流水表跑批定时任务
     */
    @Scheduled(cron = "0 55 0 * * ?")
    public synchronized void RJFyWaterTask() {
        frService.runRJFyWater(date);
    }

    /**
     * 轧差流水表跑批定时任务
     */
    @Scheduled(cron = "0 0 1 * * ?")
    public synchronized void RJGcWaterTask() {
        frService.runRJGcWater(date);
    }

    /**
     * 秒结明细流水表跑批定时任务
     */
    @Scheduled(cron = "0 05 1 * * ?")
    public synchronized void MJDetailWaterTask() {
        frService.runMJDetailWater(date);
    }

    /**
     * 同步结算信息表跑批定时任务
     */
    @Scheduled(cron = "0 10 1 * * ?")
    public synchronized void TbAccountInfoTask() {
        frService.runTbAccountInfo(date);
    }

    /**
     * 代理人同步结算信息表表跑批定时任务
     */
    @Scheduled(cron = "0 15 1 * * ?")
    public synchronized void DLRTbAccountInfoTask() {
        frService.runDLRTbAccountInfo(date);
    }
}
